export interface ApplicationSyncOptions {
  /**
   * The size of the item batch to decrypt and render upon application load.
   */
  loadBatchSize: number

  sleepBetweenBatches: number
}

export interface ApplicationDisplayOptions {
  allowNoteSelectionStatePersistence: boolean
  allowMultipleSelection: boolean
}

export interface ApplicationOptionalConfiguratioOptions {
  /**
   * URL for WebSocket providing permissions and roles information.
   */
  webSocketUrl?: string

  /**
   * Amount sync calls allowed per minute.
   */
  syncCallsThresholdPerMinute?: number

  /**
   * 3rd party library function for prompting U2F authenticator device registration
   *
   * @param registrationOptions - Registration options generated by the server
   * @returns authenticator device response
   */
  u2fAuthenticatorRegistrationPromptFunction?: (
    registrationOptions: Record<string, unknown>,
  ) => Promise<Record<string, unknown>>

  /**
   * 3rd party library function for prompting U2F authenticator device authentication
   *
   * @param registrationOptions - Registration options generated by the server
   * @returns authenticator device response
   */
  u2fAuthenticatorVerificationPromptFunction?: (
    authenticationOptions: Record<string, unknown>,
  ) => Promise<Record<string, unknown>>
}
